package com.delay.queue.delayedqueue.rediskeyexpire;

/**
 * @author gxing
 * @desc Redis 键过期监听器实现延时队列
 * @date 2021/3/11
 */
//@Component
//public class RedisKeyExpireListener extends KeyExpirationEventMessageListener {

//    private static final Topic KEYEVENT_EXPIRED_TOPIC = new PatternTopic("__keyevent@*__:expired");

    // 自定义监听通道,指定db
//    private static final Topic KEYEVENT_EXPIRED_TOPIC = new PatternTopic("__keyevent@4__:expired");

    /**
     * 添加键过期监听器,注入监听容器
     *
     * @param listenerContainer
     */
/*    public RedisKeyExpireListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }*/

    /**
     * 重写父类方法,将监听器与通道绑定并注册到监听容器
     *
     * @param listenerContainer
     */
/*    @Override
    public void doRegister(RedisMessageListenerContainer listenerContainer) {
        listenerContainer.addMessageListener(this, KEYEVENT_EXPIRED_TOPIC);
    }*/

    /**
     * 处理监听到的消息
     *
     * @param message
     */
/*    @Override
    public void doHandleMessage(Message message) {
        String key = message.toString();
        // 注意：Redis 键空间通知是针对库的所有键
        // 在设置元素时可以给键设置前缀以标识所属业务
        if (key.startsWith("DelayMessage")) {
            System.out.println("延时任务 Key:" + message.toString());
            // 拿到 key 再到 Redis 获取任务并处理
            // 处理成功, 删除任务
            // 处理失败, 重新将 key 加入到过期队列中待下次处理
        }
    }*/
//}
